/*!
 @header
 @abstract 数据库工具封装类
 @author shadow, 15-06-25 14:06:40
 
 @version 1.0
 */
#import <Foundation/Foundation.h>

#define   kDatabaseVersionKey    @"databaseVersion"
#define   kDatabaseVersion       @"1.0"

typedef void (^UpdateDatabaseBlock)(void);

/*!
 @class
 @abstract 封装数据库
 */
@interface TMTDatabase : NSObject

/*!
 @property
 @abstract 数据库名字
 */
@property (nonatomic, copy) NSString *dbName;

/*!
 @method
 @abstract 数据库单例
 @discussion
 
 @return 数据库单例
 */
+ (TMTDatabase *)sharedDatabase;

/*!
 @method
 @abstract 同步获取数据库内容
 @discussion
 
 @param sql sql语句
 @param className 返回数据类型，当数据返回时，会自动解析数据，并根据此类型创建对象
        注意：class继承JSONModel
 @return 数据库内容
 */
- (NSArray *)syncFetchDataWithQuery:(NSString *)sql className:(NSString *)className;

/*!
 @method
 @abstract 异步获取数据库内容
 @discussion
 
 @param sql      sql语句
 @param className      返回数据类型，当数据返回时，会自动解析数据，并根据此类型创建对象
        注意：class继承JSONModel
 @param complete 数据返回时处理的回调函数
 */
- (void)asyncFetchDataWithQuery:(NSString *)sql className:(NSString *)className completion:(void (^)(NSArray *data))complete;

/**
 @abstract      更新或插入数据。
 @param sql   SQL。
 @param error   若有错误则给出错误提示。
 */
- (BOOL)updateWithQuery:(NSString *)sql error:(NSError **)error;

/**
 @abstract      批量更新或插入数据。
 @param sqls 一组SQL语句。
 @param handler 数据返回时处理的回调函数，若出错则|error|不为nil。
 @discussion    使用事务延迟统一更新。
 */
- (void)updateBatchWithQueries:(NSArray *)sqls
             completion:(void (^)(NSError *error))complete;

/**
 @abstract      执行sql操作。
 @param sql     SQL。
 @return BOOL   执行结果成功或失败。
 @discussion    若需要返回多组内容
 */
- (BOOL)executeWithQuery:(NSString *)sql;

/**
 *  返回数据库的版本号
 *
 *  @return 返回版本号
 */
- (NSString *)getDatabaseVersion;

@end
